package main

import (
	"fmt"
)

// 包内全局 一般采用就近定义
const a = 111

// c := 333

var (
	b = 222
	d = 444
)

func showBValue() int {
	fmt.Printf("%v %p\n", b, &b)
	return b
}

func main() {
	fmt.Println(1, a)
	// fmt.Println(1.1, &a) // constant不可以取地址
	// := 说明一定在本函数中定义一个局部变量
	a := 100 // 可以，注意，不是所有语言在这句话上表达都一样，我们这里是讲 Go
	fmt.Println(2, a, &a)

	fmt.Println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
	fmt.Println(3, b, &b)
	b = 200
	fmt.Println(3.1, b, &b)
	b := 300
	fmt.Println(3.2, b, &b)
	fmt.Println(3.3, showBValue())
	fmt.Println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")

	{
		const j = 'A'
		var k = "magedu"
		t := true
		a = 700
		b := 800
		fmt.Println(4, a, b, d, j, k, t)
		{
			x := 900
			fmt.Println(4.1, a, b, d, j, k, t, x)
		}
		// fmt.Println(4.2, x) // 是多少 报错
	}
	// fmt.Println(4.3, j, k, t) // 报错
	fmt.Println(4.4, a, b)
}
